Mountpoint for Amazon S3 を利用して、WordPress のメディアファイルをオフロードしてみた

Mountpoint for Amazon S3 を利用して、WordPress のメディアファイルをオフロードしてみた

Clock Icon2023.12.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、森田です。

みなさん、Mountpoint for Amazon S3 を使っていますか?

Mountpoint for Amazon S3 は非常に便利なツールで、AWS製のS3マウントツールとなっており、現在一般利用も可能となっております。

本記事では、実際にWordPressのメディアファイルをオフロードする用途として使ってみたいと思います。

Mountpoint for Amazon S3 のおさらい

操作

Mountpoint for Amazon S3では、以下の操作が可能です。

  • ファイルの作成
  • ファイルの削除
    • マウント時に--allow-deleteオプションの指定が必須
  • ファイルの上書き
    • --allow-deleteオプションを使用すると、最初にオブジェクトを削除してから再作成可能
  • マウント先の指定
    • --prefixを使用すると S3 バケット内のフォルダにマッピングすることが可能

権限

マウント時の権限については以下のようになっています。

  • 特に何も指定せず、マウントすると、ディレクトリ内のファイル読み込み権限は実行したユーザ
    • --uid--gidオプションなどを指定することで任意の設定可能

WordPress で Mountpoint for Amazon S3 の導入

前提

EC2インスタンスは起動済みとします。

本記事では、Amazon Linux 2023 を利用します。

また、S3アクセスができるようにEC2インスタンスにIAMロールも付与済みとします。

S3バケットの作成

パブリックアクセスが可能となるようにS3バケットの作成を行います。

まずは、作成時にブロックパブリックアクセスをオフにして作成を行います。

作成後は、以下のバケットポリシーを設定し、s3:GetObjectを許可します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicRead",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*"
        }
    ]
}

WordPress インストール

EC2インスタンスに接続を行い、WordPress のインストールを行います。

sudo dnf install wget php-mysqlnd httpd php-fpm php-mysqli mariadb105-server php-json php php-devel -y
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
cat wordpress/wp-includes/version.php
$wp_version = '6.4.2';

mountpoint-s3 のインストール

以下のコマンドを実行してインストールを行います。

wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
sudo dnf install -y ./mount-s3.rpm

WordPress 用のデータベース設定

以下のコマンドを実行して、WordPress用のデータベース設定を行います。

sudo systemctl start mariadb httpd
sudo mysql -u root -p

MariaDB [(none)]> CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
Query OK, 0 rows affected (0.005 sec)

MariaDB [(none)]> CREATE DATABASE `wordpress-db`;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> exit
Bye

WordPress 設定

wp-config.phpへデータベースの情報を記載します。

cp wordpress/wp-config-sample.php wordpress/wp-config.php
vi wordpress/wp-config.php

wordpress/wp-config.phpDB_NAMEなどを記載していきます。

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress-db' );

/** Database username */
define( 'DB_USER', 'wordpress-user' );

/** Database password */
define( 'DB_PASSWORD', 'your_strong_password' );

記載後、wordpressのディレクトリをhtml配下にコピーします。

sudo cp -r wordpress/* /var/www/html/

apache ユーザの権限設定

以下のコマンドを実行して、/var/wwwのコンテンツ所有者を apache ユーザに変更します。

sudo chown -R apache /var/www

メディアファイルアップロード先のフォルダを作成

/var/www/htmlにメディアファイルアップロード先のimagesディレクトリを作成します。

cd /var/www/html
sudo mkdir images
sudo chown -R apache:apache images

imagesディレクトリにS3バケットをマウントします。

マウント時には、apacheユーザに権限を持たせるため、apacheユーザでマウントを行います。

sudo su -s /bin/bash apache # apacheユーザに切り替え
mount-s3 バケット名  ./images  --allow-delete --prefix images/
prefix images/ of bucket バケット名 is mounted at ./images

パブリックIPアドレスにアクセス

http://パブリックIP にアクセスすると以下のように言語の設定が表示されます。

日本語を選択して、WordPressの設定を完了させます。

options.phpで設定値変更

http://パブリックIP/wp-admin/options.php にアクセスするとアップロードパスの設定が可能です。

今回は、imagesにファイルをアップロードするため、upload_pathにimagesを設定します。

また、upload_url_pathは、 https://バケット名.s3.ap-northeast-1.amazonaws.com/images を指定します。

メディアのアップロード

では、設定が完了しましたので、実際にメディアライブラリにコンテンツをアップロードします。

アップロード後は、ファイルの表示もできており、S3のURLとなっていることが確認できます。

実際に、S3バケットの中身を確認すると、アップロードしたファイルが確認できます。

メディアの削除

アップロードしたファイルを削除を行います。

S3バケットからもファイルが削除されていることが確認できます。

さいごに

Mountpoint for Amazon S3 を使ってみましたが、非常に簡単に使うことができました。

今回は、あまり細かくマウントの設定を行いませんでしたが、マウント時のオプションが豊富にあり、利用シーンに合わせて設定すると良さそうです。

特にオプションのキャッシュ構成は、気になりますので、また別の機会に触ってみます。

参考

mountpoint-s3のオプションについて

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.